﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MengLin.OOP.DesignPattern.Proxy.AOP.Models;

namespace MengLin.OOP.DesignPattern.Proxy.AOP
{
    /// <summary>
    /// 代理用户服务
    /// </summary>
    public class UserServiceProxy : IUserService//继承
    {
        private IUserService UserService = new WomanUserService();//组合，这里可以是女人用户服务，也可以是男人用户服务

        /// <summary>
        /// 注册用户
        /// </summary>
        /// <param name="user"></param>
        public void RegUser(User user)
        {
            //在本身业务之前加入一些逻辑
            RegUserBefore(user);

            //调用构造函数传入的对象执行本身的业务逻辑
            this.UserService.RegUser(user);

            //在本身业务之后加入一些逻辑
            RegUserAfter(user);
        }

        /// <summary>
        /// 业务逻辑之前
        /// </summary>
        /// <param name="user"></param>
        private void RegUserBefore(User user)
        {
            Console.WriteLine("方法执行前");
        }

        /// <summary>
        /// 业务逻辑之后
        /// </summary>
        /// <param name="user"></param>
        private void RegUserAfter(User user)
        {
            Console.WriteLine("方法执行后");
        }
    }
}
